package com.songlanyun.modules.cnarea.controller.api;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.songlanyun.common.enums.HouniaoConstant;
import com.songlanyun.common.utils.HouniaoApiUtil;
import com.songlanyun.common.utils.R;
import com.songlanyun.modules.cnarea.entity.CnArea;
import com.songlanyun.modules.cnarea.service.CnAreaHNService;
import com.songlanyun.modules.cnarea.service.CnAreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 行政区域
 *
 * @author lubo
 * @email sunlightcs@gmail.com
 * @date 2020-11-13 22:33:46
 */
@RestController
@RequestMapping("api/cnarea")
public class CnAreaApiController  {
    @Autowired
    private CnAreaService cnAreaService;

    @Autowired
    private HouniaoApiUtil houniaoApiUtil;

    @Autowired
    private CnAreaHNService cnAreaHNService;

    /**
     * 刷新候鸟数据在本地
     */
    @GetMapping("/hnRefresh")
    public R hnRefresh() {
        cnAreaHNService.hnRefresh();
        return R.ok();
    }

    /**
     * 获取省份地址
     */
    @GetMapping("/getProvince")
    public R getProvince() {
        JSONObject province = cnAreaHNService.getProvince();
        return R.ok().put("data",province);
    }
    /**
     * 获取省份下级地址
     */
    @GetMapping("/getCity/{provinceId}")
    public R getCity(@PathVariable("provinceId") String provinceId) {
        JSONObject city = cnAreaHNService.getCity(provinceId);
        return R.ok().put("data",city);
    }
    /**
     * 获取省份下级地址
     */
    @GetMapping("/getArea/{cityId}")
    public R getArea(@PathVariable("cityId") String cityId) {
        JSONObject area = cnAreaHNService.getCity(cityId);
        return R.ok().put("data", area);
    }
//    /**
//     *
//     */
//    @GetMapping("/all-lbs")
//    //@RequiresPermissions("cnarea:cnarea:save")
//    public R getALLLbs(){
//        Map<String, List<CnArea>> all =  cnAreaService.getALLLbs();
//        return R.ok().put("data",all);
//    }


//    /**
//     * 刷新txlbs数据在本地
//     */
//    @GetMapping("/refresh")
//    //@RequiresPermissions("cnarea:cnarea:save")
//    public R getALLLbs(){
//         cnAreaService.refresh();
//        return R.ok();
//    }


    /**
     * 获得省市区三级数据
     */
    @GetMapping("/all")
    //@RequiresPermissions("cnarea:cnarea:save")
    public R getTXLbsData(){
        JSONArray treeLbs = cnAreaService.getTXLbsData();
        return R.ok().put("data",treeLbs);
    }


    /**
     * 测试接口（请求腾训行政区域）
     */
    @GetMapping("/tx-test")
    public R getTx(){
        // 本地缓存获取，无则数据库获取，并存入缓存
        JSONArray treeLbs = cnAreaService.getTXLbsData();
        return R.ok().put("tree",treeLbs);
    }

    /**
     * 测试接口（请求候鸟行政区域）
     */
    @GetMapping("/hn-test")
    public R getHn(){
        // 本地缓存获取，无则数据库获取，并存入缓存
        JSONObject req = new JSONObject();
        JSONObject treeLbs = houniaoApiUtil.client(req, HouniaoConstant.AREAS_LIST.getUrl());
        return R.ok().put("tree",treeLbs);
    }

    /**
     * 测试接口（请求候鸟行政区域）转Array
     */
    @GetMapping("/hn-test-arr")
    public R getHnArray(){
        // 本地缓存获取，无则数据库获取，并存入缓存
        JSONObject req = new JSONObject();
        JSONObject treeLbs = houniaoApiUtil.client(req, HouniaoConstant.AREAS_LIST.getUrl());
        // JSONObject -> JSONArray
        JSONArray tree = treeLbs.getJSONArray("data");
        return R.ok().put("tree",tree);
    }


    /**
     * 获得省市区三级数据
     */
    @GetMapping("/tree-lbs")
    //@RequiresPermissions("cnarea:cnarea:save")
    public R getTreeLbs(){
        JSONObject treeLbs = cnAreaService.getTreeLbs();
        return R.ok().put("tree",treeLbs);
    }

    @GetMapping("/lbs-children/{parentCode}")
    //@RequiresPermissions("cnarea:cnarea:save")
    public R getChildren(@PathVariable("parentCode") String parentCode){
        List<CnArea> list =  cnAreaService.getChildren(parentCode);
        return R.ok().put("list",list);
    }


    /**
     * 根据行政编号查父级
     * @param code
     * @return
     */
    @RequestMapping("/lbs-path/{code}")
    //@RequiresPermissions("cnarea:cnarea:save")
    public R getPath(@PathVariable("code") String code){
        List<CnArea> list =  cnAreaService.getPath(code);
        return R.ok().put("list",list);
    }

    /**
     * 逆地址解析（坐标位置描述）
     */
    @GetMapping("/get-address/{location}")
    //@RequiresPermissions("cnarea:cnarea:save")
    public R getAddress(@PathVariable("location") String location) {
        JSONObject code = cnAreaService.getAddress(location);
        return R.ok().put("date", code);
    }

    /**
     * 地址解析（地址转坐标）
     */
    @GetMapping("/get-code/{address}")
    //@RequiresPermissions("cnarea:cnarea:save")
    public R getCode(@PathVariable("address") String address) {
        JSONObject code = cnAreaService.getCode(address);
        return R.ok().put("date", code);
    }

    /**
     * getTreeLbs
     */
    @RequestMapping("/tree-lbs/city")
    //@RequiresPermissions("cnarea:cnarea:save")
    public R getTreeLbsByCity(){
        CnArea root = cnAreaService.getTreeLbsByCity();
        return R.ok().put("tree",root);
    }


}
